package Projekt;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Spielbrett extends JFrame {
    // Deklaration aller GUI-Komponenten

    private static final long serialVersionUID = 1L;

    private MyActionListener al = new MyActionListener();
    private Container pinnwand;
    private JButton neuesSpiel;
    private JButton rundenEnde;
    private JButton gebaeude;
    private JButton gebzerstoeren;
    private JButton truppenbew;
    private JButton kaserne;
    private JLabel kaserne_lbl;
    private JButton muehle;
    private JLabel muehle_lbl;
    private JButton holz;
    private JLabel holz_lbl;
    private JButton eisenmine;
    private JLabel eisenmine_lbl;
    private JPanel panel;
    private JPanel truppenpanel;
    private SpringLayout layout;
    private SpringLayout layout_truppen;
    private JButton speer;
    private JLabel speer_lbl;
    private JButton schwert;
    private JLabel schwert_lbl;
    private boolean move=false;
    private int startFeld;
    private int zielFeld;

    
    
    String textvonfelder="";
    
    
    private JButton brett[] = new JButton[100];
    public JLabel info;
    
    String pic = "";
    ImageIcon figur = new ImageIcon();
    ImageIcon leer = new ImageIcon();

    public Spielbrett() // Konstruktor
    {
        init();
    }//Konstruktor

    // Raum für die Methoden, die die Reaktionen ausführen
    // Action-Listener, hört die Ereignisse ab, entscheidet was zu tun ist
    // und ruft die Reaktion auf
    class MyActionListener implements ActionListener {

        Spielbrett gui = Spielbrett.this; // Referenz auf das GUI-Objekt

        public void actionPerformed(ActionEvent e) {
            
            Object obj = e.getSource();// Ermitteln der Ereignisquelle
            JButton temp=(JButton) obj;
            
            if (obj == neuesSpiel) {
                neuesSpiel(); //Methode cleared die Felder
                rundenEnde.setEnabled(true);
                for (int i = 0; i < brett.length; i++) {
                    brett[i].setEnabled(true);
                }

            } else if (obj == rundenEnde) {
                Controller.rundeBeenden();
            }
            
            else if (obj == gebaeude) {
                
                info.setText(textvonfelder);
                panel.setVisible(true);            
            }
            
            else if (obj == gebzerstoeren) {
            	info.setText(textvonfelder);
                int i = Integer.parseInt( textvonfelder); 
                brett[i].setIcon(leer);
                brett[i].setBackground(Color.WHITE);
                
            }
            else if (obj == truppenbew) {
            	startFeld = Integer.parseInt( textvonfelder);
            	
            	info.setText(textvonfelder);
                int i = Integer.parseInt( textvonfelder); 
                paneltruppen();
            //    brett[i].setIcon(leer);
              //  brett[i].setBackground(Color.WHITE);
                //Controller.bewegeTruppen(i,)
                
            }
            
            else if (obj == kaserne){
            	int gebaeudeid=14; //Kaserne
                int i = Integer.parseInt( textvonfelder); 
                gebaeudebauen(gebaeudeid, i);
                
            }
            else if (obj == muehle){
                //Überprüfen ob schon ein Gebäude steht fehlt noch
                //daten an Controller geben bzw holen auch
            	int gebaeudeid=10; //Muehle
                int i = Integer.parseInt( textvonfelder); 
                gebaeudebauen(gebaeudeid, i);
            	
            }
            else if (obj == holz){
                //Überprüfen ob schon ein Gebäude steht fehlt noch
                //daten an Controller geben bzw holen auch
            	int gebaeudeid=11; //Holzfaeller
                int i = Integer.parseInt( textvonfelder); 
                gebaeudebauen(gebaeudeid, i);

            }
            else if (obj == eisenmine){
                //Überprüfen ob schon ein Gebäude steht fehlt noch
                //daten an Controller geben bzw holen auch
            	int gebaeudeid=12; //Eisenmine
                int i = Integer.parseInt( textvonfelder); 
                gebaeudebauen(gebaeudeid, i);

            }
            else if (obj == speer){
            	move=true;
            	
            }
            else if (obj == schwert){
            	
            }
            
            else {
            	
            	Controller.addTruppe(0, 1, 10);///////////zum testen
                int i = Integer.parseInt( temp.getName());
                info.setText(temp.getName());
                textvonfelder = temp.getName();
                panel.setVisible(false);
              if (Controller.truppenVorhanden(i) == true)
                {
               	truppenbew.setEnabled(true);
                }
                else{
                	truppenbew.setEnabled(false);
                }
                	
                if (Controller.getGebaeudeBesitzer(i) == 0 ){
                    gebaeude.setEnabled(true);
                    gebzerstoeren.setEnabled(false);
                info.setText(temp.getName()+"");
            }
               else if (Controller.getGebaeudeBesitzer(i) == Controller.getAktuellerSpieler()) {
                    gebaeude.setEnabled(false);
                    gebzerstoeren.setEnabled(true);
                }
               else if (Controller.getGebaeudeBesitzer(i) != Controller.getAktuellerSpieler()){
                   gebaeude.setEnabled(false);
                   gebzerstoeren.setEnabled(false);
               }
            }
            
            

        }// actionPerformed

        public void neuesSpiel() {
//Felder auf dem UI Clearen
            for (int i = 0; i < brett.length; i++) {
                brett[i].setBackground(Color.WHITE);
                brett[i].setIcon(leer);
            }
            
//Spielfeld und Objekte anlegen, startpunkte werden festgestellt            
            Controller.initialisiereSpiel();
    
            for (int i = 0; i < brett.length; i++) {
                if (Controller.getGebaeudeBesitzer(i) == 1) {
                    pic = "hauptgebaeude_Icon.gif";
                    figur = new ImageIcon(".\\Projekt\\" + pic);
                    brett[i].setIcon(figur);    
                    brett[i].setBackground(Color.GREEN);
                } else if (Controller.getGebaeudeBesitzer(i) == 2) {
                    pic = "hauptgebaeude_Icon.gif";
                    figur = new ImageIcon(".\\Projekt\\" + pic);
                    brett[i].setIcon(figur);    
                    brett[i].setBackground(Color.RED);
                }

            }
        }

    }
    public void init(){
        setTitle("2D Strategie"); // Legt den Fenstertitel fest
        setDefaultCloseOperation(EXIT_ON_CLOSE); // Anwendung wird geschlossen ohne zu speichern
        pinnwand = getContentPane(); // Eine Referenz auf Oberflächeninhalt
        pinnwand.setLayout(null); // Absolute Positionierung von Komponenten einschalten

        brett(); //erzeugt Brett
        
        panel = new JPanel();
        panel.setBounds(580, 125, 200, 300);
        pinnwand.add(panel);  
        panel.setVisible(false);
        layout = new SpringLayout();
        panel.setLayout(layout);
        
        truppenpanel = new JPanel();
        truppenpanel.setBounds(580, 125, 200, 300);
        pinnwand.add(truppenpanel);  
        truppenpanel.setVisible(false);
        layout_truppen = new SpringLayout();
        truppenpanel.setLayout(layout_truppen);
        
        //erzeugt die Labels und Buttons
        gebbutton();
        truppenbutton();
        kaserne();
        muehle();
        holzfaeller();
        eisenmine();
        
        
        info = new JLabel("INFO:");
        info.setBounds(600, 50, 150, 30);

        neuesSpiel = new JButton("Neues Spiel");
        neuesSpiel.setBounds(100, 600, 120, 30);
        neuesSpiel.addActionListener(this.al);
        
        rundenEnde = new JButton("Rundenende");
        rundenEnde.setBounds(220, 600, 120, 30);
        rundenEnde.addActionListener(this.al);
        rundenEnde.setEnabled(false);

        pinnwand.add(rundenEnde);
        pinnwand.add(info);
        pinnwand.add(neuesSpiel);

        setSize(800, 700);// Fenstergröße einstellen
        setVisible(true);// Fenster anzeigen
    
    }
    public void brett(){
        int j = 0, k = 0;
        for (int i = 0; i < brett.length; i++) {
            
            brett[i] = new JButton();
            brett[i].setName(""+i);
            brett[i].setBounds(10 + (j * 50), 10 + (k * 50), 50, 50);
            j++;
            brett[i].setBackground(Color.WHITE);
            brett[i].setEnabled(false);
            if (j == 10) {
                j = 0;
                k++;
            }
            brett[i].addActionListener(this.al);
            pinnwand.add(brett[i]);
            
        }
    }
    public void gebbutton(){
         gebaeude = new JButton("Gebaeude bauen");
         gebaeude.setBounds(580, 450, 150, 30);
         gebaeude.addActionListener(this.al);
         gebaeude.setEnabled(false);
         pinnwand.add(gebaeude);
         
         gebzerstoeren = new JButton("Gebaeude zerstoeren");
         gebzerstoeren.setBounds(580, 500, 150, 30);
         gebzerstoeren.addActionListener(this.al);
         gebzerstoeren.setEnabled(false);    
         pinnwand.add(gebzerstoeren);
    }
    public void truppenbutton(){
    	truppenbew = new JButton("Truppen bewegen");
    	truppenbew.setBounds(580, 550, 150, 30);
        truppenbew.addActionListener(this.al);
        truppenbew.setEnabled(false);
        pinnwand.add(truppenbew);
   }
    
    
    public void kaserne(){
        kaserne = new JButton("");
        kaserne.addActionListener(this.al);
        pic = "Kaserne_Icon.gif";
        figur = new ImageIcon(".\\Projekt\\" + pic);
        kaserne.setIcon(figur);
        kaserne_lbl = new JLabel("Kaserne bauen");
        panel.add(kaserne);
        panel.add(kaserne_lbl);
        layout.putConstraint(SpringLayout.WEST, kaserne_lbl, 10, SpringLayout.EAST, kaserne);
        layout.putConstraint(SpringLayout.NORTH, kaserne_lbl, 0 , SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.NORTH, kaserne,  0, SpringLayout.NORTH, panel);
    }
    
    public void muehle(){
        muehle = new JButton("");
        muehle.setBounds(580, 200, 50, 50);
        muehle.addActionListener(this.al);
        pic = "Muehle_Icon.gif";
        figur = new ImageIcon(".\\Projekt\\" + pic);
        muehle.setIcon(figur);
        muehle_lbl= new JLabel("Muehle bauen       ");
        muehle_lbl.setBounds(650, 200, 150, 50);
        panel.add(muehle);
        panel.add(muehle_lbl);
        layout.putConstraint(SpringLayout.WEST, muehle_lbl, 10, SpringLayout.EAST, muehle);
        layout.putConstraint(SpringLayout.NORTH, muehle_lbl, 75 , SpringLayout.NORTH, panel);
        layout.putConstraint(SpringLayout.NORTH, muehle, 75 , SpringLayout.NORTH, panel);  
    }
    public void holzfaeller(){
         holz = new JButton("");
         holz.setBounds(580, 275, 50, 50);
         holz.addActionListener(this.al);
         pic = "holzfaeller.gif";
         figur = new ImageIcon(".\\Projekt\\" + pic);
         holz.setIcon(figur);
         holz_lbl= new JLabel("Holzfaeller bauen");
         holz_lbl.setBounds(650, 275, 150, 50);
         panel.add(holz);
         panel.add(holz_lbl);
         layout.putConstraint(SpringLayout.WEST, holz_lbl, 10, SpringLayout.EAST, holz);
         layout.putConstraint(SpringLayout.NORTH, holz_lbl, 170 , SpringLayout.NORTH, panel);
         layout.putConstraint(SpringLayout.NORTH, holz, 150 , SpringLayout.NORTH, panel);
    }
    public void eisenmine(){
         eisenmine = new JButton("");
         eisenmine.setBounds(580, 350, 50, 50);
         eisenmine.addActionListener(this.al);
         pic = "eisenmine.gif";
         figur = new ImageIcon(".\\Projekt\\" + pic);
         eisenmine.setIcon(figur);
         eisenmine_lbl= new JLabel("Eisenmine bauen");
         eisenmine_lbl.setBounds(650, 350, 150, 50);
         panel.add(eisenmine); 
         panel.add(eisenmine_lbl);
         layout.putConstraint(SpringLayout.WEST, eisenmine_lbl, 10, SpringLayout.EAST, eisenmine);
         layout.putConstraint(SpringLayout.NORTH, eisenmine_lbl, 225 , SpringLayout.NORTH, panel);
         layout.putConstraint(SpringLayout.NORTH, eisenmine, 225 , SpringLayout.NORTH, panel);
    }
  public void  setgebbackground(){
	  int i = Integer.parseInt( textvonfelder);
      if (Controller.getAktuellerSpieler() == 1){
      	brett[i].setBackground(Color.GREEN);
      }
      else{
      	brett[i].setBackground(Color.RED);
      }
  }
  
	public void gebaeudebauen(int gebaeudeid, int feldnummer) {
    	info.setText(textvonfelder);
        if (Controller.getGebaeudeBesitzer(feldnummer) == 0 ){ 
        	
        	if (gebaeudeid==10) pic = "Muehle_Icon.gif";
        	else if (gebaeudeid==11)pic = "holzfaeller.gif";
        	else if (gebaeudeid==12)pic = "eisenmine.gif";
        	else if (gebaeudeid==14)pic = "Kaserne_Icon.gif";
        	
        figur = new ImageIcon(".\\Projekt\\" + pic);
        brett[feldnummer].setIcon(figur);
        Controller.setGebaeude(feldnummer, gebaeudeid);
        setgebbackground();
        panel.setVisible(false);
        gebaeude.setEnabled(false);
		
	}

	}
	public void paneltruppen(){
		speerkaempfer();
		schwertkaempfer();
        truppenpanel.setVisible(true);
	}
	public void speerkaempfer(){
        speer = new JButton("");
        speer.addActionListener(this.al);
        pic = "Kaserne_Icon.gif";
        figur = new ImageIcon(".\\Projekt\\" + pic);
        speer.setIcon(figur);
        speer_lbl = new JLabel("Speerkaempfer");
        truppenpanel.add(speer);
        truppenpanel.add(speer_lbl);
        layout_truppen.putConstraint(SpringLayout.WEST, speer_lbl, 10, SpringLayout.EAST, speer);
        layout_truppen.putConstraint(SpringLayout.NORTH, speer_lbl, 0 , SpringLayout.NORTH, truppenpanel);
        layout_truppen.putConstraint(SpringLayout.NORTH, speer,  0, SpringLayout.NORTH, truppenpanel);
	}
	
	public void schwertkaempfer(){
		 schwert = new JButton("");
		 schwert.addActionListener(this.al);
	        pic = "Kaserne_Icon.gif";
	        figur = new ImageIcon(".\\Projekt\\" + pic);
	        schwert.setIcon(figur);
	        schwert_lbl = new JLabel("Schwertkaempfer");
	        truppenpanel.add(schwert);
	        truppenpanel.add(schwert_lbl);
	        layout_truppen.putConstraint(SpringLayout.WEST, schwert_lbl, 10, SpringLayout.EAST, schwert);
	        layout_truppen.putConstraint(SpringLayout.NORTH, schwert_lbl, 75 , SpringLayout.NORTH, truppenpanel);
	        layout_truppen.putConstraint(SpringLayout.NORTH, schwert, 75 , SpringLayout.NORTH, truppenpanel);
	}

}

